package com.itheima.edu.info.manager.controller;

import com.itheima.edu.info.manager.domain.Student;
import com.itheima.edu.info.manager.service.StudentService;

import java.util.Scanner;
/*
    学生 - 客服接待
 */
public class StudentController {
    /*
        保证一个客服只有一个service一个dao,解决重复调用创建Service & Dao
        方式一 : 下行代码
        方式二 : 在Dao中将数据仓库置为static
     */
    //一般 上游管理员 和 输入 都可以一次创建多次使用
    StudentService studentService = new StudentService();//一个Controller对应一个Service
    Scanner sc = new Scanner(System.in);
    String id;

    public void start() {
        //学生管理系统菜单搭建
        while (true) {
            System.out.println("--------欢迎来到<学生>管理系统--------");
            System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.返回");
            String choice = sc.next();
            switch (choice) {
                case "1":
                    addStudent();
                    break;
                case "2":
                    deleteStudent();
                    break;
                case "3":
                    updateStudent();
                    break;
                case "4":
                    findAllStudents();
                    break;
                case "5":
                    return;
                default:
                    System.out.println("输入有误,请重新输入!");
            }
        }
    }
    //客服 - 修改学生功能
    private void updateStudent() {
        //1 指挥业务员提供学生信息
        Student[] allStudents = studentService.findAllStudents();
        //2 校验学生信息存在性,有,下一步,没有,输出提示
        if(isNull(allStudents))return;
        //2-1 判断是否在非空库中匹配到输入的工号
       id = inputStudentId(true);//你希望id 在库-true 还是 不在库-false?
        //3 指挥Service删除指定id全部信息
        Student stu = inputStudentInfo(id);
        studentService.updateStudent(stu);
        //4 输出结果
        System.out.println("修改成功!");
    }

    //客服 - 删除学生功能
    public void deleteStudent() {
        //1 指挥业务员提供学生信息
        Student[] allStudents = studentService.findAllStudents();
        //2 校验学生信息存在性,有,下一步,没有,输出提示
        if(isNull(allStudents))return;
        //2-1 判断是否在非空库中匹配到输入的工号
        id = inputStudentId(true);//你希望id 在库-true 还是 不在库-false?
        studentService.deleteStudent(id);
        //4 输出结果
        System.out.println("删除成功!");
    }

    //客服 - 查询学生功能
    public void findAllStudents() {
        //1 指挥业务员提供学生信息
        Student[] allStudents = studentService.findAllStudents();
        //2 校验学生信息存在性,有,下一步,没有,输出提示并返回上一级
        if(isNull(allStudents))return;
        //3 展示信息
        System.out.println("学号\t\t姓名\t年龄\t生日");//表头
        for (int i = 0; i < allStudents.length; i++) {
            Student stu = allStudents[i];
            if (stu != null){
                System.out.println(stu.getSid() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirth());
            }
        }
    }

    //客服 - 添加学生功能
    public void addStudent() {
        //1 添加 - 接收学生信息(零散)
        //1-1 添加 - 判断id是否存在 ->传递给业务员
        id = inputStudentId(false);//你希望id 在库-true 还是 不在库-false?
        Student stu = inputStudentInfo(id);
        //3 添加 - 返回boolean型返回值并提示 <-业务员返回结果
        boolean res = studentService.addStudent(stu);
        if (res){
            System.out.println("添加成功");
        }else System.out.println("人数已满,添加失败");
    }

    //*优化1 - + flag 为拓展优化
    public String inputStudentId(boolean flag){//你希望id 在库-true 还是 不在库-false?
        //判断是否在非空库中匹配到输入的工号
        while (true){
            System.out.println("请输入id");
            id = sc.next();
            boolean res = studentService.isExists(id);
            if (res == flag){//结果与希望值匹配
                break;
            }else {
                if (flag){
                    System.out.println("id不存在,请重新输入");
                }else System.out.println("id已存在,请重新输入");
            }
        }
        return id;
    }
    //优化2
    public Student inputStudentInfo(String id){
        //3 指挥Service删除指定id全部信息
        System.out.println("请输入姓名");
        String name = sc.next();
        System.out.println("请输入年龄");
        String age = sc.next();
        System.out.println("请输入生日");
        String birthday = sc.next();
        //2 添加 - 封装为学生对象(完整)
        return new Student(id,name,age,birthday);
    }
    //优化3
    public boolean isNull(Student[] allStudents){
        if (allStudents == null){//没有数据
            System.out.println("系统无数据,请添加后重试");
            return true;
        }
        return false;
    }

}
